/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modelo;

import Bean.Dispositivo;
import Conexion.Conexion;
import Configuracion.AppConfig;
import java.sql.*;
import java.util.ArrayList;

/**
 *
 * @author Korey
 */
public class DAO_Dispositivos {

    private String SQL = "";
    private PreparedStatement statement;
    ResultSet rs;
    private int id = -1;
    private int bandera = -1;
    private Connection conexion;

    public int insertaDispositivo(Dispositivo dispositivo) {

        Conexion con = new Conexion(AppConfig.Servidor, AppConfig.Usuario, AppConfig.Contrasena, AppConfig.BD, AppConfig.Puerto);

        conexion = con.getConexion();
        if (conexion != null) {
            try {

                this.SQL = "Insert into equipo (descripcion, modelo, serial,status,cantidad,id_tipo) values (?,?,?,?,?,?)";

                 this.statement = conexion.prepareStatement(SQL, Statement.RETURN_GENERATED_KEYS);
    
                this.statement.setString(1, dispositivo.getDescripcion());
                this.statement.setString(2, dispositivo.getModelo());
                this.statement.setString(3, dispositivo.getSerial());
                this.statement.setInt(4, 1);
                this.statement.setInt(5, dispositivo.getCantidad());
                this.statement.setInt(6, dispositivo.getId_tipo());
                this.bandera = this.statement.executeUpdate();


                if (bandera == 1) {
                    
                    rs = statement.getGeneratedKeys(); //obtiene el id generado
                    while (rs.next()) { // Nos, regresa en forma de arreglo.
                        id = rs.getInt(1);
                    }
                    Dispositivo disp=consultaID(id);
                    DAO_TipoDispositivo dao=new DAO_TipoDispositivo();
                    dao.agregaDispositivo(disp.getCantidad(), disp.getId_tipo());
                }
                if (this.statement != null) { 
                    this.statement.close(); // Cierra la conexión
                }
            } catch (Exception e) { // esta parte es si catcha un error
                System.out.println("Dispositivos insertaDispositivo: " + e.getMessage());
                con.cerrarConexion(); // si habia un error, aun cierra la conexión.
            } finally {
                con.cerrarConexion(); // finalmente ciere la conexión.
            }
        }
        
        //ya que termino regresa el ID
        return this.id;
    }
 // Consulta ID, crea los parametros de conexión.
    public Dispositivo consultaID(int idDispositivo) {
        Conexion con = new Conexion(AppConfig.Servidor, AppConfig.Usuario, AppConfig.Contrasena, AppConfig.BD, AppConfig.Puerto);
        Dispositivo infDispositivo = new Dispositivo();
        
        // se verifica que se crea una conexión con el null
        try {
            // se cre la consulta de base de datos.
            SQL = "SELECT id, descripcion,modelo, serial,status,cantidad,id_tipo"
                    + " FROM equipo where id=?;";
            System.out.println(SQL);
            statement = con.getConexion().prepareStatement(SQL); // creo la conexión y al mismo tiempo preparo el Stament(sentencia).
            statement.setInt(1, idDispositivo); // enviamos el parametro idAlumno
            ResultSet result = statement.executeQuery(); //excuteQuery sirve solo para las consultas....

            
          
            while (result.next()) {
           // obtengo primero un objeto llamos ID alumno,  y lo convierte a String después lo convierta a entero.
                infDispositivo.setID(Integer.parseInt(result.getObject("id").toString()));
                infDispositivo.setDescripcion(result.getObject("descripcion").toString());
                infDispositivo.setModelo(result.getObject("modelo").toString());
                infDispositivo.setSerial(result.getObject("serial").toString());
                infDispositivo.setStatus(Integer.parseInt(result.getObject("status").toString()));
                infDispositivo.setCantidad(Integer.parseInt(result.getObject("cantidad").toString()));
                infDispositivo.setId_tipo(Integer.parseInt(result.getObject("id_tipo").toString()));
                
            }
            
            // pregunta si hay más
            if (statement != null) {
                statement.close(); // cierra la xonexión
            }
        } catch (Exception e) {
            System.out.println("Dispositivos consultaID: " + e.toString());
            con.cerrarConexion(); //cierra la conexión
        } finally {
            con.cerrarConexion();
            
        }
        return infDispositivo;
    }

   
    public String consultaDisp(int id_Dispositivo) {
        Conexion con = new Conexion(AppConfig.Servidor, AppConfig.Usuario, AppConfig.Contrasena, AppConfig.BD, AppConfig.Puerto);
        String descripcionDispositivos = "";
        try {
            SQL = "SELECT equipo from tsu where id_Dispositivo=?";

            statement = con.getConexion().prepareStatement(SQL);
            statement.setInt(1, id_Dispositivo);
            ResultSet result = statement.executeQuery();

            descripcionDispositivos = result.getObject("equipo").toString();

            if (statement != null) {
                statement.close();
            }
        } catch (Exception e) {
            System.out.println("Dispositivos consultaTipo: " + e.toString());
            con.cerrarConexion();
        } finally {
            con.cerrarConexion();
            return descripcionDispositivos;
        }
    }
    
     public int eliminaDisp(int id_Dispositivo){
             bandera = -1;
        Conexion con = new Conexion(AppConfig.Servidor, AppConfig.Usuario, AppConfig.Contrasena, AppConfig.BD, AppConfig.Puerto);
        conexion = con.getConexion();
        if (conexion != null) {
            try {
                conexion.setAutoCommit(false);
                Dispositivo disp=consultaID(id_Dispositivo);
                this.SQL = "Update equipo set status=0 where id=?";
                this.statement = conexion.prepareStatement(SQL);
//                this.statement.setString(1, "I");
                statement.setInt(1, id_Dispositivo);
//            eliminado=statement.executeUpdate();
                this.bandera = this.statement.executeUpdate();

                if (bandera == 1) {
                    DAO_TipoDispositivo dtd=new DAO_TipoDispositivo();
//                    dtd.actualizaDispositivo(disp.getCantidad(),disp.getId_tipo());
                    conexion.commit();
                }

                if (this.statement != null) {
                    this.statement.close();
                }
            } catch (Exception e) {
                System.out.println("dispositivo.baja: " + e.getMessage());
                try {
                    conexion.rollback();
                } catch (SQLException error) {
                    System.out.println("dispositivo.baja.rollback: " + error.getMessage());
                }
                con.cerrarConexion();
            }
            finally {
                try{
                conexion.setAutoCommit(true);
                }catch(SQLException exc){
                    System.out.println("no se restauro el estado de la transacccion");
                }
                con.cerrarConexion();
            }
        }
        return this.bandera;

        }
    
    
//     public int eliminaDisp(int id_Dispositivo) {
//        Conexion con = new Conexion(AppConfig.Servidor, AppConfig.Usuario, AppConfig.Contrasena, AppConfig.BD, AppConfig.Puerto);
//        int eliminado=0;
//        try {
//            conexion.setAutoCommit(false);
//            SQL = "Update equipo set status=0 where id=?";
//
//            statement = con.getConexion().prepareStatement(SQL);
//            statement.setInt(1, id_Dispositivo);
//            eliminado=statement.executeUpdate();
//            System.out.println(statement.toString());
////            descripcionDispositivos = result.getObject("equipo").toString();
//
//            if (statement != null) {
//                statement.close();
//            }
//        } catch (Exception e) {
//            System.out.println("Dispositivos consultaTipo: " + e.toString());
//            con.cerrarConexion();
//        } finally {
//            con.cerrarConexion();
//            return eliminado;
//        }
//    }
         public ArrayList<Dispositivo> getListaDispositivos() {
        Conexion con = new Conexion(AppConfig.Servidor, AppConfig.Usuario, AppConfig.Contrasena, AppConfig.BD, AppConfig.Puerto);
        ArrayList<Dispositivo> lista=new ArrayList<Dispositivo>();
        
        // se verifica que se crea una conexión con el null
        try {
            // se cre la consulta de base de datos.
            SQL = "SELECT * FROM equipo where status=1;";
            System.out.println(SQL);
            
            statement = con.getConexion().prepareStatement(SQL);
            
            ResultSet result = statement.executeQuery(); //excuteQuery sirve solo para las consultas....

            while (result.next()) {
                Dispositivo infDispositivo = new Dispositivo();
                infDispositivo.setID(Integer.parseInt(result.getObject("id").toString()));
                infDispositivo.setDescripcion(result.getObject("descripcion").toString());
                infDispositivo.setModelo(result.getObject("modelo").toString());
                infDispositivo.setSerial(result.getObject("serial").toString());
                infDispositivo.setStatus(Integer.parseInt(result.getObject("status").toString()));
                infDispositivo.setCantidad(Integer.parseInt(result.getObject("cantidad").toString()));
                infDispositivo.setId_tipo(Integer.parseInt(result.getObject("id_tipo").toString()));
                
                lista.add(infDispositivo);
                
                
            }
            
            // pregunta si hay más
            if (statement != null) {
                statement.close(); // cierra la xonexión
            }
        } catch (Exception e) {
            System.out.println("Dispositivos consultaID: " + e.toString());
            con.cerrarConexion(); //cierra la conexión
        } finally {
            con.cerrarConexion();
            return lista;
        }
    }
         public int actualizarDispositivo(Dispositivo disp){
             bandera = -1;
        Conexion con = new Conexion(AppConfig.Servidor, AppConfig.Usuario, AppConfig.Contrasena, AppConfig.BD, AppConfig.Puerto);
        conexion = con.getConexion();
        if (conexion != null) {
            try {
                conexion.setAutoCommit(false);
                DAO_TipoDispositivo dtd=new DAO_TipoDispositivo();
                Dispositivo dispositivo=consultaID(disp.getID());
                this.SQL = "update equipo set descripcion=?,modelo=?,serial=?,cantidad=?, id_tipo=? where id=?;";
                this.statement = conexion.prepareStatement(SQL);
//                this.statement.setString(1, "I");
                 
                this.statement.setString(1,disp.getDescripcion());
                this.statement.setString(2,disp.getModelo());
                //agregar marca
                this.statement.setString(3,disp.getSerial());
//                this.statement.setInt(4,disp.getStatus());
                this.statement.setInt(4,disp.getCantidad());
                this.statement.setInt(5,disp.getId_tipo());
                this.statement.setInt(6,disp.getID());
//                System.out.println(statement.toString());
                this.bandera = this.statement.executeUpdate();

                if (bandera == 1) {

//                    dtd.actualizaDispositivo(dispositivo.getCantidad(),dispositivo.getId_tipo());
//                    dtd.agregaDispositivo(disp.getCantidad(), disp.getId_tipo());
//                    dtd.agregaDispositivo(disp.getCantidad(), disp.getId_tipo());
                    conexion.commit();
                }

                if (this.statement != null) {
                    this.statement.close();
                }
            } catch (Exception e) {
                System.out.println("profesor.baja: " + e.getMessage());
                try {
                    conexion.rollback();
                } catch (SQLException error) {
                    System.out.println("profesor.baja.rollback: " + error.getMessage());
                }
                con.cerrarConexion();
            }
            finally {
                con.cerrarConexion();
            }
        }
        return this.bandera;

        }
}
